class Trace {
private:
	static Trace* self;
	
	vector<TraceNode*> mNodes;
public:
	static Trace* getTrace();

	void push(TraceNode* node)
	{
		mNodes.push_back(node);
	}

	void pop()
	{
		if (!std::uncaught_exception())
		{
			mNodes.pop_back();
		}
	}
	void dump(std::ostream& os)
	{
		int i = 0;
		for(vector<TraceNode*>::reverse i = mNodes.begin(), e = mNodes.end(); i != e; i++)
		{
			i->print(os, i++);
		}
	}
}
